From 51b177cac1903876e5eebf1db4656c1700ad4134 Mon Sep 17 00:00:00 2001 From: critiqjo Date: Tue, 14 Apr 2015 23:48:22 +0530 Subject: [PATCH] Added more commands and options --- cargo-completion | 46 ----------- src/etc/cargo.bashcomp.sh | 168 ++++++++++++++------------------------ 2 files changed, 60 insertions(+), 154 deletions(-) delete mode 100644 cargo-completion diff --git a/cargo-completion b/cargo-completion deleted file mode 100644 index 5cc396b34..000000000 --- a/cargo-completion +++ /dev/null @@ -1,46 +0,0 @@ - -_cargo() -{ - local cur prev words cword - _init_completion || return - - COMPREPLY=() - - local cmd=${words[1]} - - #commands='bench build clean doc new package run search test update version' - #commands+='fetch generate-lockfile git-checkout locate-project login owner pkgid publish read-manifest verify-project yank' - opt_common='-h --help -v --verbose' - opt_pkg='-p --package' - opt_feat='--features --no-default-features' - opt_mani='--manifest-path' - declare -A opts - opts[_nocmd]="$opt_common -V --version --list" - opts[bench]="$opt_common $opt_pkg $opt_feat $opt_mani --target --bench --no-run -j --jobs" - opts[build]="$opt_common $opt_pkg $opt_feat $opt_mani --target -j --jobs --lib --release" - opts[clean]="$opt_common $opt_pkg $opt_mani --target" - opts[doc]="$opt_common $opt_pkg $opt_feat $opt_mani --target --open --no-deps -j --jobs" - opts[new]="$opt_common --vcs --bin" - opts[run]="$opt_common $opt_feat $opt_mani --target --bin --example -j --jobs --release" - opts[test]="$opt_common $opt_pkg $opt_feat $opt_mani --target --test --bin --no-run -j --jobs" - opts[update]="$opt_common $opt_pkg $opt_mani --aggressive --precise" - opts[package]="$opt_common $opt_mani -l --list --no-verify --no-metadata" - opts[version]="$opt_common" - - if [[ $cword -eq 1 ]]; then - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W "${opts[_nocmd]}" -- "$cur" ) ) - else - COMPREPLY=( $( compgen -W "$(cargo --list | tail -n +2)" -- "$cur" ) ) - fi - elif [[ $cword -gt 2 && "$prev" = "$opt_mani" ]]; then - _filedir - elif [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W "${opts[$cmd]}" -- "$cur" ) ) - fi - - return 0 -} && -complete -F _cargo cargo - -# vim:ft=sh diff --git a/src/etc/cargo.bashcomp.sh b/src/etc/cargo.bashcomp.sh index bf1e68943..f4b6d6ec3 100644 --- a/src/etc/cargo.bashcomp.sh +++ b/src/etc/cargo.bashcomp.sh @@ -1,109 +1,61 @@ -have cargo && -_cargo() { - local commands split=false - local cur cmd - - COMPREPLY=() - cur=$(_get_cword "=") - cmd="${COMP_WORDS[1]}" - - _expand || return 0 - - commands=$(cargo --list|grep -v 'Installed Commands:') - - # these options require an argument - if [[ "${cmd}" == -@(A|B|C|G|g|m) ]] ; then - return 0 - fi - - _split_longopt && split=true - - case "${cmd}" in - bench|test) - COMPREPLY=( $(compgen -W \ - "--features --help --jobs --manifest-path --no-default-features \ - --no-run --package --target --verbose" \ - -- "${cur}") ) - return 0;; - build) - COMPREPLY=( $(compgen -W \ - "--features --help --jobs --manifest-path --no-default-features \ - --package --release --target --verbose" \ - -- "${cur}") ) - return 0;; - clean) - COMPREPLY=( $(compgen -W \ - "--help --manifest-path --package --target --verbose" \ - -- "${cur}") ) - return 0;; - config-for-key) - COMPREPLY=( $(compgen -W \ - "--help --human --key=" \ - -- "${cur}") ) - return 0;; - config-for-key) - COMPREPLY=( $(compgen -W \ - "--help --human" \ - -- "${cur}") ) - return 0;; - doc) - COMPREPLY=( $(compgen -W \ - "--features --help --jobs --manifest-path --no-default-features \ - --no-deps --open --verbose" \ - -- "${cur}") ) - return 0;; - fetch|generate-lockfile|package|pkgid|read-manifest|verify-project) - COMPREPLY=( $(compgen -W \ - "--help --manifest-path --verbose" \ - -- "${cur}") ) - return 0;; - git-checkout) - COMPREPLY=( $(compgen -W \ - "--help --reference= --url= --verbose" \ - -- "${cur}") ) - return 0;; - locate-project) - COMPREPLY=( $(compgen -W \ - "--help --host --verbose" \ - -- "${cur}") ) - return 0;; - new) - COMPREPLY=( $(compgen -W \ - "--bin --git --help --hg --no-git --verbose" \ - -- "${cur}") ) - return 0;; - run) - COMPREPLY=( $(compgen -W \ - "--features --help --jobs --manifest-path --no-default-features \ - --release --target --verbose" \ - -- "${cur}") ) - return 0;; - update) - COMPREPLY=( $(compgen -W \ - "--aggressive --help --manifest-path --package --precise --verbose" \ - -- "${cur}") ) - return 0;; - upload) - COMPREPLY=( $(compgen -W \ - "--help --host --manifest-path --token --verbose" \ - -- "${cur}") ) - return 0;; - version) - COMPREPLY=( $(compgen -W \ - "--help --verbose" \ - -- "${cur}") ) - return 0;; - help) - return 0;; - esac - - $split && return 0 - - if [ ${COMP_CWORD} -eq 1 ]; then - COMPREPLY=( $(compgen -W \ - "${commands} --help --list --verbose --version" -- "${cur}") ) - return 0 - fi - _filedir +command -v cargo >/dev/null 2>&1 && +_cargo() +{ + local cur prev words cword cmd commands + _init_completion || return + + COMPREPLY=() + + cmd=${words[1]} + + commands=$(cargo --list | tail -n +2) + + opt_common='-h --help -v --verbose' + opt_pkg='-p --package' + opt_feat='--features --no-default-features' + opt_mani='--manifest-path' + + declare -A opts + opts[_nocmd]="$opt_common -V --version --list" + opts[bench]="$opt_common $opt_pkg $opt_feat $opt_mani --target --bench --no-run -j --jobs" + opts[build]="$opt_common $opt_pkg $opt_feat $opt_mani --target -j --jobs --lib --release" + opts[clean]="$opt_common $opt_pkg $opt_mani --target" + opts[doc]="$opt_common $opt_pkg $opt_feat $opt_mani --target --open --no-deps -j --jobs" + opts[fetch]="$opt_common $opt_mani" + opts[generate-lockfile]="${opts[fetch]}" + opts[git-checkout]="$opt_common --reference= --url=" + opts[locate-project]="${opts[fetch]}" + opts[login]="$opt_common --host" + opts[new]="$opt_common --vcs --bin" + opts[owner]="$opt_common -a --add -r --remove -l --list --index --token" + opts[pkgid]="${opts[fetch]}" + opts[publish]="$opt_common $opt_mani --host --token --no-verify" + opts[read-manifest]="${opts[fetch]}" + opts[run]="$opt_common $opt_feat $opt_mani --target --bin --example -j --jobs --release" + opts[test]="$opt_common $opt_pkg $opt_feat $opt_mani --target --test --bin --no-run -j --jobs" + opts[update]="$opt_common $opt_pkg $opt_mani --aggressive --precise" + opts[package]="$opt_common $opt_mani -l --list --no-verify --no-metadata" + opts[verify-project]="${opts[fetch]}" + opts[version]="$opt_common" + opts[yank]="$opt_common --vers --undo --index --token" + + if [[ $cword -eq 1 ]]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "${opts[_nocmd]}" -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) + fi + elif [[ $cword -gt 2 && "$prev" = "$opt_mani" ]]; then + _filedir + elif [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "${opts[$cmd]}" -- "$cur" ) ) + fi + + if [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} != "--"*"=" ]] ; then + compopt +o nospace + fi + return 0 } && -complete -F _cargo ${nospace} cargo +complete -o nospace -F _cargo cargo + +# vim:ft=sh -- 2.30.2